#pragma once

#include "Sol9Types.h"

namespace sol9
{
namespace core
{
	class radian;

	class degree
	{
	private:
		f32 d;

	public:
		/// constructors
		degree();

		explicit degree(f32 degrees);
		
		degree(const degree& degrees);
		
		degree(const radian& radians);

		/// operators
		// -degree
		degree operator-() const;

		// degree = value
		degree& operator=(const f32& value);

		// degree = degree
		degree& operator=(const degree& degrees);

		// degree = radian
		degree& operator=(const radian& radians);

		// degree + degree
		degree operator+(const degree& degrees) const;

		// degree + radian
		degree operator+(const radian& radians) const;

		// degree += degree
		degree& operator+=(const degree& degrees);

		// degree += radian
		degree& operator+=(const radian& radians);

		// degree - degree
		degree operator-(const degree& degrees) const;

		// degree - radian
		degree operator-(const radian& radians) const;

		// degree -= degree
		degree& operator-=(const degree& degrees);

		// degree -= radian
		degree& operator-=(const radian& radians);

		// degree * value
		degree operator*(const f32& value) const;

		// degree * degree
		degree operator*(const degree& degrees) const;

		// degree *= value
		degree& operator*=(const f32& value);

		// degree / value
		degree operator/(const f32& value) const;

		// degree /= value
		degree& operator/=(const f32& value);

		// degree < degree
		bool operator<(const degree& degrees) const;

		// degree <= degree
		bool operator<=(const degree& degrees) const;

		// degree > degree
		bool operator>(const degree& degrees) const;

		// degree >= degree
		bool operator>=(const degree& degrees) const;

		// degree == degree
		bool operator==(const degree& degrees) const;

		//// degree == radians
		//bool operator==(const degree& radians) const;

		// degree != degree
		bool operator!=(const degree& degrees) const;

		//// degree != radians
		//bool operator!=(const degree& radians) const;

		/// functions
		f32 makeRadian() const;
	};

} // namespace core
} // namespace sol9